using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;

namespace ASPNETVN.PORTAL.Modules.ADVERTISEMENT.Components
{
    public partial class Item
    {
        #region Properties.

        public int ID { set; get; }
        public Guid ModuleID { set; get; }
        public string Company { set; get; }
        public string Title { set; get; }
        public string ImageUrl { set; get; }
        public string Url { set; get; }
        public string Description { set; get; }
        public int Height { set; get; }
        public int Width { set; get; }
        public bool Status { set; get; }
        public DateTime PublishedDate { set; get; }
        public DateTime ExpiredDate { set; get; }
        public string CreatedBy { set; get; }
        public DateTime CreatedDate { set; get; }

        #endregion

        //---------------------------------------------------------------------------------------------

        #region Select methods.

        public static Item Load(int id)
        {
            const string spName = "[dbo].[p_ADVERTISEMENT_Item_Load]";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@ID", SqlDbType.Int, id);
            Item entity = null;
            IDataReader reader = db.ExecuteReader(dbCommand);
            if (reader.Read())
            {
                entity = new Item();
                if (!reader.IsDBNull(reader.GetOrdinal("ID"))) entity.ID = reader.GetInt32(reader.GetOrdinal("ID"));
                if (!reader.IsDBNull(reader.GetOrdinal("ModuleID"))) entity.ModuleID = reader.GetGuid(reader.GetOrdinal("ModuleID"));
                if (!reader.IsDBNull(reader.GetOrdinal("Company"))) entity.Company = reader.GetString(reader.GetOrdinal("Company"));
                if (!reader.IsDBNull(reader.GetOrdinal("Title"))) entity.Title = reader.GetString(reader.GetOrdinal("Title"));
                if (!reader.IsDBNull(reader.GetOrdinal("ImageUrl"))) entity.ImageUrl = reader.GetString(reader.GetOrdinal("ImageUrl"));
                if (!reader.IsDBNull(reader.GetOrdinal("Url"))) entity.Url = reader.GetString(reader.GetOrdinal("Url"));
                if (!reader.IsDBNull(reader.GetOrdinal("Description"))) entity.Description = reader.GetString(reader.GetOrdinal("Description"));
                if (!reader.IsDBNull(reader.GetOrdinal("Height"))) entity.Height = reader.GetInt32(reader.GetOrdinal("Height"));
                if (!reader.IsDBNull(reader.GetOrdinal("Width"))) entity.Width = reader.GetInt32(reader.GetOrdinal("Width"));
                if (!reader.IsDBNull(reader.GetOrdinal("Status"))) entity.Status = reader.GetBoolean(reader.GetOrdinal("Status"));
                if (!reader.IsDBNull(reader.GetOrdinal("PublishedDate"))) entity.PublishedDate = reader.GetDateTime(reader.GetOrdinal("PublishedDate"));
                if (!reader.IsDBNull(reader.GetOrdinal("ExpiredDate"))) entity.ExpiredDate = reader.GetDateTime(reader.GetOrdinal("ExpiredDate"));
                if (!reader.IsDBNull(reader.GetOrdinal("CreatedBy"))) entity.CreatedBy = reader.GetString(reader.GetOrdinal("CreatedBy"));
                if (!reader.IsDBNull(reader.GetOrdinal("CreatedDate"))) entity.CreatedDate = reader.GetDateTime(reader.GetOrdinal("CreatedDate"));
            }
            reader.Close();
            return entity;
        }

        //---------------------------------------------------------------------------------------------
        public static List<Item> SelectCollectionAll(Guid moduleID)
        {
            List<Item> collection = new List<Item>();
            SqlDataReader reader = (SqlDataReader)SelectReaderAll(moduleID);
            while (reader.Read())
            {
                Item entity = new Item();

                if (!reader.IsDBNull(reader.GetOrdinal("ID"))) entity.ID = reader.GetInt32(reader.GetOrdinal("ID"));
                if (!reader.IsDBNull(reader.GetOrdinal("ModuleID"))) entity.ModuleID = reader.GetGuid(reader.GetOrdinal("ModuleID"));
                if (!reader.IsDBNull(reader.GetOrdinal("Company"))) entity.Company = reader.GetString(reader.GetOrdinal("Company"));
                if (!reader.IsDBNull(reader.GetOrdinal("Title"))) entity.Title = reader.GetString(reader.GetOrdinal("Title"));
                if (!reader.IsDBNull(reader.GetOrdinal("ImageUrl"))) entity.ImageUrl = reader.GetString(reader.GetOrdinal("ImageUrl"));
                if (!reader.IsDBNull(reader.GetOrdinal("Url"))) entity.Url = reader.GetString(reader.GetOrdinal("Url"));
                if (!reader.IsDBNull(reader.GetOrdinal("Description"))) entity.Description = reader.GetString(reader.GetOrdinal("Description"));
                if (!reader.IsDBNull(reader.GetOrdinal("Height"))) entity.Height = reader.GetInt32(reader.GetOrdinal("Height"));
                if (!reader.IsDBNull(reader.GetOrdinal("Width"))) entity.Width = reader.GetInt32(reader.GetOrdinal("Width"));
                if (!reader.IsDBNull(reader.GetOrdinal("Status"))) entity.Status = reader.GetBoolean(reader.GetOrdinal("Status"));
                if (!reader.IsDBNull(reader.GetOrdinal("PublishedDate"))) entity.PublishedDate = reader.GetDateTime(reader.GetOrdinal("PublishedDate"));
                if (!reader.IsDBNull(reader.GetOrdinal("ExpiredDate"))) entity.ExpiredDate = reader.GetDateTime(reader.GetOrdinal("ExpiredDate"));
                if (!reader.IsDBNull(reader.GetOrdinal("CreatedBy"))) entity.CreatedBy = reader.GetString(reader.GetOrdinal("CreatedBy"));
                if (!reader.IsDBNull(reader.GetOrdinal("CreatedDate"))) entity.CreatedDate = reader.GetDateTime(reader.GetOrdinal("CreatedDate"));
                collection.Add(entity);
            }

            reader.Close();
            return collection;
        }

        //---------------------------------------------------------------------------------------------

        public static List<Item> SelectCollectionDynamic(string whereCondition, string orderByExpression)
        {
            List<Item> collection = new List<Item>();

            SqlDataReader reader = (SqlDataReader)SelectReaderDynamic(whereCondition, orderByExpression);
            while (reader.Read())
            {
                Item entity = new Item();

                if (!reader.IsDBNull(reader.GetOrdinal("ID"))) entity.ID = reader.GetInt32(reader.GetOrdinal("ID"));
                if (!reader.IsDBNull(reader.GetOrdinal("ModuleID"))) entity.ModuleID = reader.GetGuid(reader.GetOrdinal("ModuleID"));
                if (!reader.IsDBNull(reader.GetOrdinal("Company"))) entity.Company = reader.GetString(reader.GetOrdinal("Company"));
                if (!reader.IsDBNull(reader.GetOrdinal("Title"))) entity.Title = reader.GetString(reader.GetOrdinal("Title"));
                if (!reader.IsDBNull(reader.GetOrdinal("ImageUrl"))) entity.ImageUrl = reader.GetString(reader.GetOrdinal("ImageUrl"));
                if (!reader.IsDBNull(reader.GetOrdinal("Url"))) entity.Url = reader.GetString(reader.GetOrdinal("Url"));
                if (!reader.IsDBNull(reader.GetOrdinal("Description"))) entity.Description = reader.GetString(reader.GetOrdinal("Description"));
                if (!reader.IsDBNull(reader.GetOrdinal("Height"))) entity.Height = reader.GetInt32(reader.GetOrdinal("Height"));
                if (!reader.IsDBNull(reader.GetOrdinal("Width"))) entity.Width = reader.GetInt32(reader.GetOrdinal("Width"));
                if (!reader.IsDBNull(reader.GetOrdinal("Status"))) entity.Status = reader.GetBoolean(reader.GetOrdinal("Status"));
                if (!reader.IsDBNull(reader.GetOrdinal("PublishedDate"))) entity.PublishedDate = reader.GetDateTime(reader.GetOrdinal("PublishedDate"));
                if (!reader.IsDBNull(reader.GetOrdinal("ExpiredDate"))) entity.ExpiredDate = reader.GetDateTime(reader.GetOrdinal("ExpiredDate"));
                if (!reader.IsDBNull(reader.GetOrdinal("CreatedBy"))) entity.CreatedBy = reader.GetString(reader.GetOrdinal("CreatedBy"));
                if (!reader.IsDBNull(reader.GetOrdinal("CreatedDate"))) entity.CreatedDate = reader.GetDateTime(reader.GetOrdinal("CreatedDate"));
                collection.Add(entity);
            }

            reader.Close();
            return collection;
        }

        //---------------------------------------------------------------------------------------------

        // Select by foreign key return collection		


        public static DataSet SelectAll(Guid moduleID)
        {
            const string spName = "[dbo].[p_ADVERTISEMENT_Item_SelectAll]";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@ModuleID", SqlDbType.UniqueIdentifier, moduleID);
            return db.ExecuteDataSet(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        public static DataSet SelectDynamic(string whereCondition, string orderByExpression)
        {
            const string spName = "[dbo].[p_ADVERTISEMENT_Item_SelectDynamic]";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@WhereCondition", SqlDbType.NVarChar, whereCondition);
            db.AddInParameter(dbCommand, "@OrderByExpression", SqlDbType.NVarChar, orderByExpression);

            return db.ExecuteDataSet(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        public static IDataReader SelectReaderAll(Guid moduleID)
        {
            const string spName = "[dbo].[p_ADVERTISEMENT_Item_SelectAll]";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);
            db.AddInParameter(dbCommand, "@ModuleID", SqlDbType.UniqueIdentifier, moduleID);
            return db.ExecuteReader(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        public static IDataReader SelectReaderDynamic(string whereCondition, string orderByExpression)
        {
            const string spName = "[dbo].[p_ADVERTISEMENT_Item_SelectDynamic]";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@WhereCondition", SqlDbType.NVarChar, whereCondition);
            db.AddInParameter(dbCommand, "@OrderByExpression", SqlDbType.NVarChar, orderByExpression);

            return db.ExecuteReader(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        // Select by foreign key return collection		

        #endregion

        //---------------------------------------------------------------------------------------------

        #region Insert methods.

        public static int InsertItem(Guid moduleID, string company, string title, string imageUrl, string url, string description, int height, int width, bool status, DateTime publishedDate, DateTime expiredDate, string createdBy, DateTime createdDate)
        {
            Item entity = new Item();
            entity.ModuleID = moduleID;
            entity.Company = company;
            entity.Title = title;
            entity.ImageUrl = imageUrl;
            entity.Url = url;
            entity.Description = description;
            entity.Height = height;
            entity.Width = width;
            entity.Status = status;
            entity.PublishedDate = publishedDate;
            entity.ExpiredDate = expiredDate;
            entity.CreatedBy = createdBy;
            entity.CreatedDate = createdDate;
            return entity.Insert();
        }

        public int Insert()
        {
            return this.Insert(null);
        }

        //---------------------------------------------------------------------------------------------

        public int Insert(SqlTransaction transaction)
        {
            const string spName = "[dbo].[p_ADVERTISEMENT_Item_Insert]";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddOutParameter(dbCommand, "@ID", SqlDbType.Int, 4);
            db.AddInParameter(dbCommand, "@ModuleID", SqlDbType.UniqueIdentifier, ModuleID);
            db.AddInParameter(dbCommand, "@Company", SqlDbType.NVarChar, Company);
            db.AddInParameter(dbCommand, "@Title", SqlDbType.NVarChar, Title);
            db.AddInParameter(dbCommand, "@ImageUrl", SqlDbType.VarChar, ImageUrl);
            db.AddInParameter(dbCommand, "@Url", SqlDbType.VarChar, Url);
            db.AddInParameter(dbCommand, "@Description", SqlDbType.NVarChar, Description);
            db.AddInParameter(dbCommand, "@Height", SqlDbType.Int, Height);
            db.AddInParameter(dbCommand, "@Width", SqlDbType.Int, Width);
            db.AddInParameter(dbCommand, "@Status", SqlDbType.Bit, Status);
            db.AddInParameter(dbCommand, "@PublishedDate", SqlDbType.DateTime, PublishedDate.Year <= 1753 ? DBNull.Value : (object)PublishedDate);
            db.AddInParameter(dbCommand, "@ExpiredDate", SqlDbType.DateTime, ExpiredDate.Year <= 1753 ? DBNull.Value : (object)ExpiredDate);
            db.AddInParameter(dbCommand, "@CreatedBy", SqlDbType.NVarChar, CreatedBy);
            db.AddInParameter(dbCommand, "@CreatedDate", SqlDbType.DateTime, CreatedDate.Year <= 1753 ? DBNull.Value : (object)CreatedDate);

            if (transaction != null)
            {
                db.ExecuteNonQuery(dbCommand, transaction);
                ID = (int)db.GetParameterValue(dbCommand, "@ID");
                return ID;
            }
            else
            {
                db.ExecuteNonQuery(dbCommand);
                ID = (int)db.GetParameterValue(dbCommand, "@ID");
                return ID;
            }
        }

        //---------------------------------------------------------------------------------------------
        public static bool InsertCollection(IList<Item> collection)
        {
            bool ret;
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            using (SqlConnection connection = (SqlConnection)db.CreateConnection())
            {
                connection.Open();
                using (SqlTransaction transaction = connection.BeginTransaction())
                {
                    try
                    {
                        bool ret01 = true;
                        foreach (Item item in collection)
                        {
                            if (item.Insert(transaction) <= 0)
                            {
                                ret01 = false;
                                break;
                            }
                        }
                        if (ret01)
                        {
                            transaction.Commit();
                            ret = true;
                        }
                        else
                        {
                            transaction.Rollback();
                            ret = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        throw new Exception("Error at InsertCollection method: " + ex.Message);
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
            return ret;
        }

        #endregion

        //---------------------------------------------------------------------------------------------

        #region Insert / Update methods.

        public static int InsertUpdateItem(int id, Guid moduleID, string company, string title, string imageUrl, string url, string description, int height, int width, bool status, DateTime publishedDate, DateTime expiredDate, string createdBy, DateTime createdDate)
        {
            Item entity = new Item();
            entity.ID = id;
            entity.ModuleID = moduleID;
            entity.Company = company;
            entity.Title = title;
            entity.ImageUrl = imageUrl;
            entity.Url = url;
            entity.Description = description;
            entity.Height = height;
            entity.Width = width;
            entity.Status = status;
            entity.PublishedDate = publishedDate;
            entity.ExpiredDate = expiredDate;
            entity.CreatedBy = createdBy;
            entity.CreatedDate = createdDate;
            return entity.InsertUpdate();
        }

        //---------------------------------------------------------------------------------------------

        public int InsertUpdate()
        {
            return this.InsertUpdate(null);
        }

        //---------------------------------------------------------------------------------------------

        public int InsertUpdate(SqlTransaction transaction)
        {
            const string spName = "p_ADVERTISEMENT_Item_InsertUpdate";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@ID", SqlDbType.Int, ID);
            db.AddInParameter(dbCommand, "@ModuleID", SqlDbType.UniqueIdentifier, ModuleID);
            db.AddInParameter(dbCommand, "@Company", SqlDbType.NVarChar, Company);
            db.AddInParameter(dbCommand, "@Title", SqlDbType.NVarChar, Title);
            db.AddInParameter(dbCommand, "@ImageUrl", SqlDbType.VarChar, ImageUrl);
            db.AddInParameter(dbCommand, "@Url", SqlDbType.VarChar, Url);
            db.AddInParameter(dbCommand, "@Description", SqlDbType.NVarChar, Description);
            db.AddInParameter(dbCommand, "@Height", SqlDbType.Int, Height);
            db.AddInParameter(dbCommand, "@Width", SqlDbType.Int, Width);
            db.AddInParameter(dbCommand, "@Status", SqlDbType.Bit, Status);
            db.AddInParameter(dbCommand, "@PublishedDate", SqlDbType.DateTime, PublishedDate.Year == 1753 ? DBNull.Value : (object)PublishedDate);
            db.AddInParameter(dbCommand, "@ExpiredDate", SqlDbType.DateTime, ExpiredDate.Year == 1753 ? DBNull.Value : (object)ExpiredDate);
            db.AddInParameter(dbCommand, "@CreatedBy", SqlDbType.NVarChar, CreatedBy);
            db.AddInParameter(dbCommand, "@CreatedDate", SqlDbType.DateTime, CreatedDate.Year == 1753 ? DBNull.Value : (object)CreatedDate);

            if (transaction != null)
                return db.ExecuteNonQuery(dbCommand, transaction);
            else
                return db.ExecuteNonQuery(dbCommand);
        }

        //---------------------------------------------------------------------------------------------
        public static bool InsertUpdateCollection(IList<Item> collection)
        {
            bool ret;
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            using (SqlConnection connection = (SqlConnection)db.CreateConnection())
            {
                connection.Open();
                using (SqlTransaction transaction = connection.BeginTransaction())
                {
                    try
                    {
                        bool ret01 = true;
                        foreach (Item item in collection)
                        {
                            if (item.InsertUpdate(transaction) <= 0)
                            {
                                ret01 = false;
                                break;
                            }
                        }
                        if (ret01)
                        {
                            transaction.Commit();
                            ret = true;
                        }
                        else
                        {
                            transaction.Rollback();
                            ret = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        throw new Exception("Error at InsertUpdateCollection method: " + ex.Message);

                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
            return ret;
        }
        #endregion

        //---------------------------------------------------------------------------------------------

        #region Update methods.

        public static int UpdateItem(int id, Guid moduleID, string company, string title, string imageUrl, string url, string description, int height, int width, bool status, DateTime publishedDate, DateTime expiredDate, string createdBy, DateTime createdDate)
        {
            Item entity = new Item();
            entity.ID = id;
            entity.ModuleID = moduleID;
            entity.Company = company;
            entity.Title = title;
            entity.ImageUrl = imageUrl;
            entity.Url = url;
            entity.Description = description;
            entity.Height = height;
            entity.Width = width;
            entity.Status = status;
            entity.PublishedDate = publishedDate;
            entity.ExpiredDate = expiredDate;
            entity.CreatedBy = createdBy;
            entity.CreatedDate = createdDate;
            return entity.Update();
        }

        //---------------------------------------------------------------------------------------------

        public int Update()
        {
            return this.Update(null);
        }

        //---------------------------------------------------------------------------------------------

        public int Update(SqlTransaction transaction)
        {
            const string spName = "[dbo].[p_ADVERTISEMENT_Item_Update]";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@ID", SqlDbType.Int, ID);
            db.AddInParameter(dbCommand, "@ModuleID", SqlDbType.UniqueIdentifier, ModuleID);
            db.AddInParameter(dbCommand, "@Company", SqlDbType.NVarChar, Company);
            db.AddInParameter(dbCommand, "@Title", SqlDbType.NVarChar, Title);
            db.AddInParameter(dbCommand, "@ImageUrl", SqlDbType.VarChar, ImageUrl);
            db.AddInParameter(dbCommand, "@Url", SqlDbType.VarChar, Url);
            db.AddInParameter(dbCommand, "@Description", SqlDbType.NVarChar, Description);
            db.AddInParameter(dbCommand, "@Height", SqlDbType.Int, Height);
            db.AddInParameter(dbCommand, "@Width", SqlDbType.Int, Width);
            db.AddInParameter(dbCommand, "@Status", SqlDbType.Bit, Status);
            db.AddInParameter(dbCommand, "@PublishedDate", SqlDbType.DateTime, PublishedDate.Year == 1753 ? DBNull.Value : (object)PublishedDate);
            db.AddInParameter(dbCommand, "@ExpiredDate", SqlDbType.DateTime, ExpiredDate.Year == 1753 ? DBNull.Value : (object)ExpiredDate);
            db.AddInParameter(dbCommand, "@CreatedBy", SqlDbType.NVarChar, CreatedBy);
            db.AddInParameter(dbCommand, "@CreatedDate", SqlDbType.DateTime, CreatedDate.Year == 1753 ? DBNull.Value : (object)CreatedDate);

            if (transaction != null)
                return db.ExecuteNonQuery(dbCommand, transaction);
            else
                return db.ExecuteNonQuery(dbCommand);
        }

        //---------------------------------------------------------------------------------------------
        public static bool UpdateCollection(IList<Item> collection)
        {
            bool ret;
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            using (SqlConnection connection = (SqlConnection)db.CreateConnection())
            {
                connection.Open();
                using (SqlTransaction transaction = connection.BeginTransaction())
                {
                    try
                    {
                        bool ret01 = true;
                        foreach (Item item in collection)
                        {
                            if (item.Update(transaction) <= 0)
                            {
                                ret01 = false;
                                break;
                            }
                        }
                        if (ret01)
                        {
                            transaction.Commit();
                            ret = true;
                        }
                        else
                        {
                            transaction.Rollback();
                            ret = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        throw new Exception("Error at UpdateCollection method: " + ex.Message);
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
            return ret;
        }

        #endregion

        //---------------------------------------------------------------------------------------------

        #region Delete methods.

        public static int DeleteItem(int id)
        {
            Item entity = new Item();
            entity.ID = id;

            return entity.Delete();
        }

        public int Delete()
        {
            return this.Delete(null);
        }

        //---------------------------------------------------------------------------------------------

        public int Delete(SqlTransaction transaction)
        {
            const string spName = "[dbo].[p_ADVERTISEMENT_Item_Delete]";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@ID", SqlDbType.Int, ID);

            if (transaction != null)
                return db.ExecuteNonQuery(dbCommand, transaction);
            else
                return db.ExecuteNonQuery(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        public static bool DeleteCollection(IList<Item> collection)
        {
            bool ret;
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            using (SqlConnection connection = (SqlConnection)db.CreateConnection())
            {
                connection.Open();
                using (SqlTransaction transaction = connection.BeginTransaction())
                {
                    try
                    {
                        bool ret01 = true;
                        foreach (Item item in collection)
                        {
                            if (item.Delete(transaction) <= 0)
                            {
                                ret01 = false;
                                break;
                            }
                        }
                        if (ret01)
                        {
                            transaction.Commit();
                            ret = true;
                        }
                        else
                        {
                            transaction.Rollback();
                            ret = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        throw new Exception("Error at DeleteCollection method: " + ex.Message);
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
            return ret;
        }
        #endregion
    }
}